package com.mes.schedule.manager.iface;

import java.util.List;
import com.mes.common.exception.bo.BaseBusinessException;
import com.mes.common.manager.iface.IBasicManager;
import com.mes.schedule.domain.DemandSTaskLink;
import com.mes.schedule.domain.SPartTask;
import com.mes.task.domain.Demand;


/**
 * 指令与任务关系
 * ClassName: IDemandSTaskLinkManager <br/>  
 * Function: TODO ADD FUNCTION. <br/>  
 * Reason: TODO ADD REASON. <br/>  
 * date: Jun 22, 2015 8:53:03 PM <br/>  
 * @author Administrator  
 * @version   
 * @since JDK 1.6
 */
public interface IDemandSTaskLinkManager  extends IBasicManager{
	

	public List<DemandSTaskLink> getAllEffectedLinks();

	public List<DemandSTaskLink> getEffectedLinksByDemandUid(String scheduleUid, String demandUid);
	/**
	 * 取得零件任务相关指令任务链接
	 */
	public List<DemandSTaskLink> getEffectedLinksByTaskUid(String scheduleUid, String taskUid);

	/**
	 * 取得零件任务相关指令任务链接
	 */
	public List<DemandSTaskLink> getRelativeDemandTaskLinks(SPartTask spartTask);

	/**
	 * 
	 * 删除某一个指令的所有有效链接
	 * @throws Exception 
	 */
	public void deleteLinksByDemandUid(String scheduleUid, String demandUid) throws Exception;

	/**
	 * 
	 * 删除某一个零件任务的所有有效链接
	 * @throws Exception 
	 */
	public void deleteLinksByTaskUid(String scheduleUid, String taskUid) throws Exception;
	
	
	/**
	 * 返回指令安排数量
	 * @param scheduleUid
	 * @param demandUid
	 * @return
	 */
	public void calDemandPlanInfo(String scheduleUid,Demand demand);

	
	
	/**
	 * 
	 * 删除某一部门未锁定的指令任务链接
	 * @throws Exception 
	 */
	public void deleteUnLockedLinks(String scheduleUid, String masterShopUid) throws 	BaseBusinessException, Exception ;

	/**
	 * 新增或者更新链接
	 * @param demandTaskLink
	 * @throws BaseBusinessException
	 */
	public void saveOrUpdateLink(DemandSTaskLink demandTaskLink)  throws 	BaseBusinessException ;

	
	/**
	 * 按照任务与指令的关系更新零组件任务的计划信息
	 * @param demandTaskLink
	 * @throws BaseBusinessException
	 * @throws Exception 
	 */
	public void updatePlanInfo(SPartTask spartTask)  throws 	BaseBusinessException, Exception ;


	/**
	 * 处理任务在制品数量变化
	 * 比如因为报废等质量问题引起的变化
	 * @param partTask
	 * @throws BaseBusinessException
	 */
	public void taskQtyChange(SPartTask spartTask)  throws 	BaseBusinessException ;
	

	/**
	 * 删除指令未锁定链接
	 * @param demandUid
	 */
	public void deleteUnlockLinksByDemandUid(String scheduleUid,  String demandUid);

	public void autoCreateLink(String scheduleUid,Demand demandTemp) throws BaseBusinessException;

	public float calArrangeQty(String scheduleUid,Demand demand);

}
